254. StatefulSet呼叫pod的方法
WHY
延續上篇 252. k8s中的pod呼叫 ,那篇文章中,
要直接去call statefulSet的pod,
透過ip反查,找到DNS,
但如果IP反查也找不到DNS呢?
Solution
在建立srs服務時,
根據之前的測試方式,提供RD 溝通的網址,
但上線時,一查 這個網址沒有指定,
IP也沒有對應的FQDN。
於是,才發現是sts(StatefulSet的縮寫)的設定問題。
如果要直接跟sts的pod連線時,需要使用headless service。
無頭 Service 不使用虛擬 IP 地址和代理 組態路由和封包轉發;相反,無頭 Service 通過內部 DNS 記錄報告各個 Pod 的端點 IP 地址,這些 DNS 記錄是由叢集的 DNS 服務所提供的。
要使用Headless service的話,則需設定 clusterIP: none
但 sts指定的service name要指定是有設定 Headless service的service。
sts.yaml
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: srs-edge
namespace: srs-qa
spec:
replicas: 2
serviceName: srs-edge
selector:
matchLabels:
app: srs-edge
service.yaml
apiVersion: v1
kind: Service
metadata:
name: srs-edge
namespace: srs-qa
spec:
clusterIP: None
selector:
app: srs-edge
這樣就能夠使用 <podName>.<serviceName>.<nameSpace>.svc.cluster.local
去呼叫pod了。
不放心,可以參考上一篇252. k8s中的pod呼叫用nslookup驗證FQDN
ref. StatefulSet